#ifndef __GD32E23x_HAL_TM1616_H__
#define __GD32E23x_HAL_TM1616_H__

#include <stdint.h>
#include "systick.h"

#define TM_IO_RCU           RCC_AHBPeriph_GPIOA

#define TM_STB_PORT			GPIOA
#define TM_STB_PIN			GPIO_Pin_4

#define TM_SCL_PORT         GPIOA
#define TM_SCL_PIN          GPIO_Pin_5

#define TM_SDA_PORT         GPIOA
#define TM_SDA_PIN          GPIO_Pin_7

//命令定义
#define DISPLAY_CTRL        0x8B //显示控制，显示开，亮度14/16
#define DISPLAY_ADDR_NORMAL 0x44 //固定地址方式写显存
#define DISPLAY_ADDR_INC    0x40 //自动地址增加

#define TM_BASE_ADDR        0xC0 //显示基地址
#define TM_ADDR_0           0xC0 //显示地址0
#define TM_ADDR_1           0xC2 //显示地址1
#define TM_ADDR_2           0xC4 //显示地址2
#define TM_ADDR_3           0xC6 //显示地址3

#define TM_FLOOR_UP			'N'
#define TM_FLOOR_DOWN		'U'
#define TM_FLOOR_STOP		0

typedef struct {
    void (*init)(void);         //初始化    
	int (*show_mode)(const char *data,int len);	//显示模式
	int (*show_run_time)(uint16_t dec);		//显示运行时间
	int (*show_fault)(uint8_t hex);		//显示错误异常
	int (*show_floor)(uint16_t floor,uint8_t dir);	//显示电梯运行方向
	int (*show_state)(uint8_t dir,uint8_t jt_s,uint8_t door,uint8_t pc_s);		//从机显示状态
	int (*slave_show)(int8_t floor);
	int (*slave_fault)(uint8_t fault);

//    int (*show_num)(uint8_t addr,uint8_t dec);
//    int (*show_dec)(uint16_t dec);     //显示10进制数
//    int (*show_string)(const char *data,int len);   //显示字符串             
//    int (*show_hex)(uint16_t dec);
//	int (*change_char)(int index,uint8_t c);		//修改显示
}tm1616_t;

extern const tm1616_t g_tm1616_;
#endif//__GD32E23x_HAL_TM1616_H__
